#ifndef VIDEOCONTROLLER_H
#define VIDEOCONTROLLER_H

#include <QObject>
#include <QImage>
#include <QString>
#include <atomic>
#include <thread>
#include <mutex>

#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>

// 视频控制器：处理摄像头捕获和视频帧管理
class VideoController : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString frameId READ frameId NOTIFY frameUpdated)  // 供QML绑定的帧ID属性
public:
    explicit VideoController(QObject *parent = nullptr);
    ~VideoController();

    QString frameId() const;                  // 获取当前帧ID
    QImage getCurrentFrame() const;           // 获取当前帧

public slots:
    void startVideoChat();                    // 开始视频聊天
    void stopVideoChat();                     // 停止视频聊天
    void sendVideoFrame();                    // 发送视频帧

signals:
    void videoFrameReady();                   // 视频帧准备好信号
    void statusChanged(const QString &status); // 状态变化信号
    void frameUpdated();                      // 帧更新信号（供QML刷新）
    void videoFrameCaptured(const QImage &frame); // 捕获到视频帧信号（供网络发送）

private:
    void captureThreadFunc();                 // 捕获线程函数
    void initializeVLC();                     // 初始化VLC（未实现）
    void cleanup();                           // 清理资源
    void updateFrame(const QImage &frame);    // 更新当前帧

    std::atomic<bool> m_isRunning;            // 运行状态标志
    cv::VideoCapture m_capture;               // OpenCV视频捕获对象
    std::thread m_captureThread;              // 捕获线程
    int m_cameraIndex;                        // 摄像头索引
    int m_width;                              // 帧宽度
    int m_height;                             // 帧高度

    mutable std::mutex m_frameMutex;          // 帧数据互斥锁
    QImage m_currentFrame;                    // 当前帧
    QString m_frameId;                        // 当前帧ID
    int m_frameCounter;                       // 帧计数器
};

#endif // VIDEOCONTROLLER_H
